// 对http 服务器发起请求的request 对象就是一个 Stream，还有stdout（标准输出）。
// Readable - 可读操作。
// Writable - 可写操作。
// Duplex - 可读可写操作.
// Transform - 操作被写入数据，然后读出结果。
// 所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有：

// data - 当有数据可读时触发。

// end - 没有更多的数据可读时触发。

// error - 在接收和写入过程中发生错误时触发。

// finish - 所有数据已被写入到底层系统时触发。

var fs   = require("fs"); //引入fs模块

// var data = '';
// // 创建可读流
// var readerStream = fs.createReadStream('../static/txt/input.txt');
// // 设置编码为 utf8。
// readerStream.setEncoding('UTF8');
// // // 处理流事件 --> data, end, and error
// //  data    - 当有数据可读时触发
// //  end     - 读取结束后触发。
// //  error   - 在接收和写入过程中发生错误时触发。
// //  finish  - 所有数据已被写入到底层系统时触发。
// readerStream.on('data', function(chunk) {
//     data += chunk;
// });
// readerStream.on('end',function(){
//    console.log(data,1);
// });
// readerStream.on('error', function(err){
//    console.log(err.stack,2);
// });
// console.log("创建可读流");


// 创建一个可以写入的流，写入到文件 output.txt 中
let data = 'write stream I am study node.js';
var writerStream = fs.createWriteStream('../static/txt/input.txt');
// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');
// 标记文件末尾
writerStream.end();

// 处理流事件 --> finish、error
// 执行完成事件
writerStream.on('finish', function() {
    console.log("写入完成。");
});

writerStream.on('error', function(err){
    console.log(err.stack);
});

// 写入结束后在创建可读的流
var readerStream = fs.createReadStream('../static/txt/input.txt');
// 使用 utf8 编码写入数据
readerStream.setEncoding('UTF8');
readerStream.on('data', function(chunk) {
    data += chunk;
})
readerStream.on('end',function(){
    console.log('读取写入后文件',data);
});
console.log("创建写入后读取的流");


// 管道流 pipe
//读取 input.txt 文件内容，并将内容写入到 output.txt 文件中
// 创建一个可读流
var readerStream1 = fs.createReadStream('../static/txt/input.txt');
// 创建一个可写流
var writerStream1 = fs.createWriteStream('../static/txt/test.txt');
readerStream1.pipe(writerStream1); //将读取的文件内容写进test中 但是test原内容被删除了


// 链式流 压缩文件
var zlib = require('zlib'); //引入模块zlib
var zlib = require('zlib');

// 压缩 input.txt 文件为 input.txt.gz
// fs.createReadStream('../static/txt/test.txt')
//     .pipe(zlib.createGzip())
//     .pipe(fs.createWriteStream('../static/txt/test.gz'));
//     //压缩后内容丢失了
// console.log("文件压缩完成。"); 

// 解压 input.txt.gz 文件为 input.txt
// fs.createReadStream('../static/txt/test.gz')
//   .pipe(zlib.createGunzip())
//   .pipe(fs.createWriteStream('../static/txt/test1.txt'));
  
// console.log("文件解压完成。");
